package JavaStudy.JVM;
//常量池
public class ConstantPool {
    public static void main(String[] args) {
        //较为简单，不解释
        String s1="asdf";
        String s2="asdf";
        String s3="a"+"sdf";
        String s4=new String("asdf");
        System.out.println("s1==s2:"+(s1==s2));
        System.out.println("s3==s1:"+(s3==s1));
        System.out.println("s4==s1:"+(s4==s1));

        String st1="ab";
        String st2="a";
        String st3=st2+"b";//st3等于st2引用+“b”，在编译期间是无法确定
        //通过反编译，可以看到其实是String st3=(new StringBuilder()).append(s).append("b").toString();
        //所以尽量不要在for循环中使用+来操作字符串，每循环一次创建都会新建一次StringBuilder对象，然后在append之后抛弃，如果要连接，使用stringbuilder或者StringBuffer
        System.out.println("st3==st1:"+(st3==st1));
        System.out.println("st3.intern()==st1:"+(st3.intern()==st1));//intern()返回字符串对象的规范化表示形式。

        final String st4="a";//使用了final之后就可以在编译期来确定其值
        String st5=st4+"b";
        System.out.println("st5==st1:"+(st5==st1));

    }
}
